iT邦幫忙

2024 iThome 鐵人賽

DAY 7
0
Security

密碼學小白的學習之路系列 第 7

[Day 7] 題目(Intro- 10)

  • 分享至 

  • xImage
  •  

Intro-10 You either know, XOR you don't

https://cryptohack.org/courses/intro/xorkey1/
https://ithelp.ithome.com.tw/upload/images/20240813/20168165jwmfYYuP3k.png
今天這題比較難,要自己找出密鑰。

題意:

  • 題目說他已經用密鑰加密了flag,而我們永遠無法猜到它。

hint:

flag的格式

解法1:

  • 因為我們知道flag的前幾碼是'crypto{',所以藉由確認哪些字元與密文分別進行xor運算之會得到'crypto{'來得到密鑰的線索。

程式碼與簡要註解:

from pwn import xor

key = b''  # 將 key 初始化為空的字節串
k = bytes.fromhex('0e0b213f26041e480b26217f27342e175d0e070a3c5b103e2526217f27342e175d0e077e263451150104')
target = 'crypto{'

# 尋找密鑰的每個字節
for i in range(len(target)):
    for j in range(256):
        if k[i] ^ j == ord(target[i]):  # 依序比較 XOR 解密後的結果與目標字符
            key += bytes([j])  # 將找到的字節追加到 key
            break

print(key)  # 輸出找到的密鑰字節串

b'myXORke'
推測密鑰為myXORkey,使用這個密鑰與密文進行xor運算

print(xor(k, b'myXORkey'))  # 使用找到的密鑰進行 XOR 解密並輸出結果

b'crypto{1f_y0u_Kn0w_En0uGH_y0u_Kn0w_1t_4ll}'

解法2:

  • 運用前面所學到的xor運算性質

程式碼與簡要註解:

from pwn import xor
# k ^ t = 'crypto' 
# k ^ t ^ t = 'crypto' ^ t = k
# 解密密文前7個字節來找出部分密鑰(k)

t=bytes.fromhex('0e0b213f26041e480b26217f27342e175d0e070a3c5b103e2526217f27342e175d0e077e263451150104')  
t1 = t[:7]  # 取出密文的前7個字節,這部分應該對應 'crypto{'
k = xor(t1, 'crypto{').decode()  # 將前7個字節與 'crypto{' 進行 XOR,推導出密鑰的前7個字符
print(k)  # 輸出解出的密鑰前7個字符

myXORke
推測密鑰為myXORkey,使用這個密鑰與密文進行xor運算

# 使用完整密鑰解密整個密文
print((xor('myXORkey', t)).decode())  # 將整個密文與推導出的密鑰進行 XOR 解密並輸出結果

crypto{1f_y0u_Kn0w_En0uGH_y0u_Kn0w_1t_4ll}


參考資料:

  • 筆記
  • chatbot

後話:

今天解了Intro的最後一題。明天要進入新篇章了~


上一篇
[Day 6] 題目(Intro- 8、9)
下一篇
[Day 8] 題目(Lemur XOR) & RGB、Hex色碼介紹
系列文
密碼學小白的學習之路31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言